// 网络请求拿到后台返回的路由
import {fetchPermission} from "../../api/index"
// 前端的配置数据,基础根路由
import router,{DynamicRoutes} from "../../router/index"
// 前端定义的全部路由
import dynamicRouter from "../../router/dynamic-router"
// 路由比对方法 和 默认路由方法
import {recursionRouter,setDefaultRoute} from "../../utils/recursion-router"


export default {
    namespaced:true, //指定范围，不能全局访问
    state:{
        permissionList:null ,//路有权限的所有路由资源的对象
        sidebarMenu:[],//导航菜单
        currentMenu:'' //当前菜单高亮用的
    },
    getters:{},
    mutations:{
        // 设置权限的操作
        SET_PERMISSION(state,routes){
            state.permissionList = routes;
        },
        // 清理权限的操作
        CLEAR_PERMISSION(state){
            state.permissionList = null
        },
        // 设置菜单的操作
        SET_MENU(state,menu){
            state.sidebarMenu = menu;
        },
        // 清理菜单的操作
        CLEAR_MENU(state){
            state.sidebarMenu = []
        }
    },
    // 异步访问
    actions:{
        async FETCH_PERMISSION({commit,state}){
            // 请求后端的路由配置
            let permissionList = await fetchPermission();
            // 通过路由比对方 比对前后端路由,筛选可用的路由
            let routes = recursionRouter(permissionList,dynamicRouter);
            // find() 方法返回通过测试（函数内判断）的数组的第一个元素的值。
            // 把符合条件的添入到DynamicRoutes里面,
            // 通过find寻找到v.path为空的一个,那么这个就是首页,其他的路由都是这个路由的子路由
            let MainContainer = DynamicRoutes.find(v=>v.path === "");
            // MainContainer.children是MainContainer的子路由
            let children = MainContainer.children;
            // 将其他的路由添加为根路由的子路由
            children.push(...routes)
            // 生成菜单
            console.log(children);
            // return

            commit("SET_MENU",children)    


            // 设置默认路由
            setDefaultRoute([MainContainer]);
            

            // 初始化路由,拿到的是一开始的初始化路由信息,
            let initialRoutes = router.options.routes;

            // 将比对之后符合条件的路由加入到router
            // for(let i = 0,length = DynamicRoutes.length;i<length;i+=1){
            //     const element = DynamicRoutes[i];
            //     router.addRoute(element)
            // }
            console.log(DynamicRoutes);
            router.addRoutes(DynamicRoutes);



            // 第一个初始化的路由,第二个最终的路由
            commit("SET_PERMISSION",[...initialRoutes,...DynamicRoutes])

        }
    }                                                                                                                                                                                                                                                                      
}